package com.zhz.leetcode;

import java.util.Arrays;

/**
 * 387. 字符串中的第一个唯一字符
 * 给定一个字符串s，找到 它的第一个不重复的字符，并返回它的索引 。如果不存在，则返回 -1。
 * <p>
 * 示例 1：
 * 输入: s = "leetcode"
 * 输出: 0
 * <p>
 * 示例 2:
 * 输入: s = "loveleetcode"
 * 输出: 2
 * <p>
 * 示例 3:
 * 输入: s = "aabb"
 * 输出: -1
 * <p>
 * 提示:
 * 1 <= s.length <= 105
 * s只包含小写字母
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/first-unique-character-in-a-string
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class FirstUniqueCharacterInAString387 {

    public static void main(String[] args) {
        FirstUniqueCharacterInAString387 m = new FirstUniqueCharacterInAString387();
        String s = "aabbczaaaaa";
        int index = m.firstUniqChar1(s);
        System.out.println(index);
    }

    public int firstUniqChar(String s) {
        char[] arr = s.toCharArray();
        int[] buffer1 = new int[26]; //存放出现的次数
        int[] buffer2 = new int[26]; //存放最后一次出现的位置
        for (int i = 0; i < arr.length; i++) {
            buffer1[arr[i] - 97]++;
            buffer2[arr[i] - 97] = i;
        }
        int tmpIndex = arr.length;
        for (int j = 0; j < buffer1.length; j++) {
            if (buffer1[j] == 1) {
                //如果出现的次数是1，则去buffer2里面查找他出现的位,并找到最小的位置。
                tmpIndex = Math.min(tmpIndex, buffer2[j]);
            }
        }
        return tmpIndex < s.length() ? tmpIndex : -1;
    }

    public int firstUniqChar1(String s) {
        char[] arr = s.toCharArray();
        int[] buffer1 = new int[26]; //存放出现的次数
        for (int i = 0; i < arr.length; i++) {
            buffer1[arr[i] - 97]++;
        }
        System.out.println(Arrays.toString(buffer1));
        for (int j = 0; j < arr.length; j++) {
            int t = arr[j]-97;
            if(buffer1[t]==1) return j;
        }
        return -1;
    }

}
